/**
 * 文件：LocationManager.java
 * 包名：com.baidu.mapapi.location.service;   --- 正式发布时需要修正
 * 说明：定位管理控制类
 * 作者：MS During
 * 日期：2017/5/4
 * 历史：
 */

package com.ronri.mapapi.location.service;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.cz.nongyetongv5.application.InitApplication;


// 项目根节点

public class LocationManager {

    // 地理信息
    public class LocationItem{
        // 经度
        private double Latitude;
        // 维度
        private double Longitude;
        // 地址
        private String Address;

        /***
         * 构造函数
         */
        public LocationItem() {

        }

        /***
         * 构造函数
         * @param latitude
         * @param longitude
         * @param address
         */
        public LocationItem(double latitude, double longitude, String address) {
            Latitude = latitude;
            Longitude = longitude;
            Address = address;
        }

        public double getLatitude() {
            return Latitude;
        }
        public void setLatitude(double latitude) {
            Latitude = latitude;
        }

        public double getLongitude() {
            return Longitude;
        }
        public void setLongitude(double longitude) {
            Longitude = longitude;
        }

        public String getAddress() {
            return Address;
        }
        public void setAddress(String address) {
            Address = address;
        }
    }

    /***
     * 回调接口
     */
    public interface OnLocationEvent{
        public void OnLocationResult(double lat, double lng, String szAddress);
    }

    private static String _TAG = "LocationManager";

    // 定位客户端
    private static LocationClient mLocationClient;

    // 回调事件
    private static OnLocationEvent mEvent = null;

    /***
     * 定位请求回调函数,这里面会得到定位信息
     *
     * @param bdLocation
     */
    private static BDLocationListener mBDLocationListener = new BDLocationListener() {
        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            if (bdLocation != null)
            {
                double latitude = bdLocation.getLatitude();
                double longitude = bdLocation.getLongitude();
                String szAddress = bdLocation.getAddrStr();

                mEvent.OnLocationResult(latitude, longitude, szAddress);
                if(mLocationClient.isStarted()){
                    mLocationClient.stop();
                    mLocationClient.unRegisterLocationListener(mBDLocationListener);
                }
            }
        }

        @Override
        public void onConnectHotSpotMessage(String s, int i) {

        }
    };

    /***
     * 获取位置信息
     * @param OnEvent
     */
    public static void getLocationInfo(OnLocationEvent OnEvent) {

        // 绑定回调事件
        mEvent = OnEvent;

        // 声明LocationClient类
        mLocationClient = new LocationClient(InitApplication.getInstance().getBaseContext());

        // 注册监听
        mLocationClient.registerLocationListener(mBDLocationListener);

        // 声明定位参数
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);// 设置定位模式 高精度
        option.setCoorType("bd09ll");// 设置返回定位结果是百度经纬度 默认gcj02
        option.setScanSpan(5000);// 设置发起定位请求的时间间隔 单位ms
        option.setIsNeedAddress(true);// 设置定位结果包含地址信息
        option.setNeedDeviceDirect(true);// 设置定位结果包含手机机头 的方向
        // 设置定位参数
        mLocationClient.setLocOption(option);
        // 启动定位
        mLocationClient.start();
    }

    /***
     * 销毁获取地理信息
     */
    public static void destroyLocationInfo(){
        if (mLocationClient != null){
            mLocationClient.unRegisterLocationListener(mBDLocationListener);
            mLocationClient = null;
        }
    }
}
